package nio;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * 应用实例3-使用一个Buffer完成文件复制
 *
 * @author chenyuan
 * @date 2020/11/1 16:08
 */
public class FileChannel03 {
	public static void main(String[] args) throws Exception {
		// 创建输入流对象，并获取对应的 Channel
		File file = new File("D:\\file01.txt");
		FileInputStream inputStream = new FileInputStream(file);
		FileChannel inputStreamChannel = inputStream.getChannel();

		// 创建输出流对象，并获取对应的 Channel
		FileOutputStream outputStream = new FileOutputStream("D:\\file02.txt");
		FileChannel outputStreamChannel = outputStream.getChannel();

		// 创建 Buffer
		ByteBuffer buffer = ByteBuffer.allocate(512);

		int read = 0;
		while (read != -1) {
			// 重置 Buffer 中的标志位，以免上一轮循环中 Buffer 中的信息，影响本轮操作
			buffer.clear();
			// 循环的 从 输入流 读取数据并写入到 输出流
			read = inputStreamChannel.read(buffer);
			buffer.flip();
			outputStreamChannel.write(buffer);
		}

		// 关闭输入、输出流
		inputStream.close();
		outputStream.close();
	}
}
